package com.chen.utils;

import io.jsonwebtoken.*;

import java.util.Date;

public class JwtUtils {

    /*
     * 生成token字符串
     * 1.hearder
     * 2.基本信息
     * 3.签名
     * */
    public static String getToken(String username) {
        return Jwts.builder().setHeaderParam("typ", "JWT")//头部
                //过期时间,一个小时后token过期
                .setExpiration(new Date(System.currentTimeMillis() + 3600000))
                .setSubject(username)//用户基本信息
                .signWith(SignatureAlgorithm.HS512, "chenli-jwt").compact();//签名
    }

    /*
     * 校验token
     * */
    public static Boolean validate(String token) {
        try {
            Jwts.parser().setSigningKey("chenli-jwt").parseClaimsJws(token).getBody();//拿到jwt里面的载荷
            return true;
        } catch (ExpiredJwtException e) {
            throw new RuntimeException("token已经过期");
        } catch (UnsupportedJwtException e) {
            throw new RuntimeException("不支持的token");
        } catch (MalformedJwtException e) {
            throw new RuntimeException("token令牌格式不对");
        } catch (SignatureException e) {
            throw new RuntimeException("token签名不对");
        } catch (IllegalArgumentException e) {
            throw new RuntimeException("参数不合法-秘钥不对");
        }
    }
}
